package com.soft.javase.ch02.extendss;

/**
 * @author wangzhisen
 * @Desc TODO
 * @date 2025/4/17
 *
 * 方法重载  Overload
 *  * 1.发生在同一个类
 *  * 2.方法名相同
 *  * 3.参数列表不同（个数不同、顺序不同、数据类型不同）
 *
 * 方法重写 @Override
 *  * 1.发生在继承中，子类重写父类的方法
 *  * 2.方法名相同
 *  * 3.参数列表相同
 *  * 4.关于返回值
 *  * 若返回值是基本数据类型，则要求一致；
 *  * 若返回值是引用数据类型，则要求子类的返回值类型<=父类的返回值类型； Object > Animal > Dog
 *  * 5.关于访问权限修饰符
 *  * 子类的访问权限修饰符 >= 父类的访问权限修饰符
 *  * public > protected > (default) > private
 *  * 6.关于方法抛出异常
 *  * 子类抛出的异常 <= 父类抛出的异常  Exception > RuntimeException > NullPointerException
 *  *
 *  * 注意：
 *  * 1.子类重写的父类中方法，一旦加上@Override，将会进行语法检查
 *  * 2.一旦子类重写父类的逻辑，执行的逻辑是子类重写后的逻辑
 *  * 3.父类对象不能使用子类新拓展的成员属性、成员方法
 */
public class Dog extends Animal {

    //Alt + Insert 快速生成构造方法

    public Dog() {
    }

    public Dog(String player) {
        this.player = player;
    }

    public Dog(String name, int age, String color, String player) {
        //调用父类中有参的构造方法
        super(name, age, color);
        this.player = player;
    }

    //玩伴
    private String player;

    //拓展新的方法
    public void kanjia(){
        System.out.println(this.getName() + "和"+player+"正在看家呢...");
    }


    /**
     *方法重写 ctrl+o
     *
     */
    @Override
    public void eat() {
        //调用父类的逻辑 super.eat();
        System.out.println(this.getName()+"和"+player+"正在一起吃饭...");
    }
}
